<?php
	namespace auth;
	use BaseController,View,Str,Input,Validator,Redirect,Auth,Mail,Hash,Config;
	use User;
	class AuthController extends BaseController{
		// Đăng Ký
		public function getDangky(){
			return View::make('auth.pages.dangky')->with('titlePage','Tuyển Sinh 2015-Đăng ký thông tin');
		}
		public function postDangky(){
			// Thiết lập báo lỗi
			$user_rules = array(
				"txtusername"		=>  "required|unique:vhu_users,username",
				"txtpassword"		=>	"required|min:6",
				"txthoten"			=>	"required|min:6",
				"txtngaysinh"		=>	"required|min:10",
				"GioiTinh"			=>	"required",
				"txtemail"			=>	"required|min:10|email|unique:vhu_users,Email",
				"txtsodienthoai"	=>	"required|min:10|max:13|regex:/[0-9]/",
				"urlHinh"			=>	"image|max:5000",
				"txtcapchar"		=>  "required|captcha",
			);
			$user_mess = array(
				"txtusername.required"		=> 'Vui lòng nhập username.',
				"txtusername.unique"		=> 'Username đã tồn tại.',
				"txtpassword.required"		=> 'Vui lòng nhập mật khẩu',
				"txtpassword.min"			=> "Mật khẩu tối thiểu :min ký tự.",
				"txthoten.required"			=> 'Vui lòng nhập họ tên',
				"txthoten.min"				=> "Họ tên tối thiểu :min ký tự.",
				"txtngaysinh.required"		=> 'Vui lòng nhập ngày sinh',
				"txtngaysinh.min"			=> "Ngày sinh tối thiểu :min ký tự.",
				"GioiTinh.required"			=> 'Vui lòng chọn giới tính',
				"txtemail.required"			=> 'Vui lòng nhập Email.',
				"txtemail.min"				=> 'Email tối thiểu :min ký tự.',
				"txtemail.email"			=> 'Email phải là định dạng email.',
				"txtemail.unique"			=> 'Email đã tồn tại.',
				"txtsodienthoai.required"	=> 'Vui lòng nhập số điện thoại.',
				"txtsodienthoai.min"		=> 'Số điện thoại tối thiểu :min ký tự.',
				"txtsodienthoai.max"		=> 'Số điện thoại tối đa :max ký tự.',
				"txtsodienthoai.regex"		=> 'Số điện thoại chỉ được nhập từ 0-9.',
				"urlHinh.image"				=>	"Tập tin phải là dạng hình ảnh (jpeg,bmp,png,jpg,gif)",
				"urlHinh.max"				=>	"Hình Avatar tối đa là :max kb",
				"txtcapchar.required"		=>	"Vui lòng nhập mã bảo mật",
				"txtcapchar.captcha"		=>	"Mã bảo mật không đúng",
			);
			// Customer message
			$valid = Validator::make(Input::all(), $user_rules,$user_mess);
			if($valid->passes()){
				$dataInsert = array(
					"username"		=>	trim(Input::get('txtusername')),
					"password"		=>	Hash::make(trim(Input::get('txtusername')).trim(Input::get('txtpassword'))),
					"permisions"	=>	1,
					"HoTen"			=>	trim(Input::get('txthoten')),
					"NgaySinh"		=>	trim(Input::get('txtngaysinh')),
					"GioiTinh"		=>	trim(Input::get('GioiTinh')),
					"Email"			=>	trim(Input::get('txtemail')),
					"SoDT"			=>	trim(Input::get('txtsodienthoai')),
					"urlHinh"		=>	"",
					"created_at"	=>	\Carbon\Carbon::now(),
					"updated_at"	=>	\Carbon\Carbon::now(),
					"HienThi"		=> 1,
				);
				User::create($dataInsert);
				$datalogin = array(
					"username" => Input::get('txtusername'),
					"password" => Input::get('txtusername').Input::get('txtpassword'),
					"HienThi"  => 1,
				);
				if(Auth::attempt($datalogin)){
					return Redirect::route('default_home')->with('success',"Đăng ký thành công.");
				}
			}else{
				return Redirect::route('auth.get.dangky')->withInput(Input::except("txtpassword","txtcapchar"))->withErrors($valid);
			}
		}
		// Đăng Nhập
		public function getLogin(){
			return View::make('auth.pages.login');
		}
		public function postLogin(){
			$remember = (Input::has('remember')) ? true : false;
			$data = array(
				"username" => Input::get('txtusername'),
				"password" => Input::get('txtusername').Input::get('txtpassword'),
				"HienThi"  => 1
			);
			if(Auth::attempt($data,$remember)){
				return Redirect::route('default_home');
			}else{
				return Redirect::to('auth/login')->withInput(Input::except("txtpassword"))->with('flash_mess','Tên đăng nhập hoặc mật khẩu không đúng.')->withInput();
			}
		}
		/* Phần forgot password */
		public function getforgot(){
			return View::make('auth.pages.forgot');
		}
		public function postforgot(){
			// Xử lý forgot pass word
			// Thiet lap validator
			$change_rules = array(
				"txtusername"	=>	"required",
				"txtdienthoai"	=>  "required|min:10|max:13",
				"txtcapchar"	=>  "required|captcha",
			);
			$change_langs = array(
				"txtusername.required"	=>	"Vui lòng nhập tên đăng nhập",
				"txtdienthoai.required"	=>	"Vui lòng nhập số điện thoại",
				"txtdienthoai.min"		=>	"Số điện thoại tối thiểu :min ký tự.",
				"txtdienthoai.max"		=>	"Số điện thoại tối đa :max ký tự.",
				"txtcapchar.required"	=>	"Vui lòng nhập mã bảo mật",
				"txtcapchar.captcha"	=>	"Mã bảo mật không đúng",
			);
			// End thiet lap validator
			$valid = Validator::make(Input::all(),$change_rules,$change_langs);
			if($valid->passes()){
				// Validator thông tin
				$username = User::where('username','=',Input::get('txtusername'))->count();
				if($username > 0){
					$users = User::where('username','=',Input::get('txtusername'))
							 ->where('SoDT','=',Input::get('txtdienthoai'))
				             ->first();
					if(isset($users)){
						$activation_code = str_random(66);
						// Thực hiện update và send Email
						User::where('idUser', '=', $users->idUser)->update(array('activation_code' => $activation_code,'last_active' => \Carbon\Carbon::now()->addMinutes(20)));
						// Send Email
						$dataEmail = array(
					    	'user' 		=> $users->username,
					    	'code' 		=> $activation_code,
					    	'dateNow' 	=> \Carbon\Carbon::now(),
					    	'dateReset' => \Carbon\Carbon::now()->addMinutes(20),
					    );
						Mail::send('emails.forgot',$dataEmail, function($message) use ($users)
					    {
					      $message->from(Config::get('mail.username'), 'Đại Học Văn Hiến');
					      $message->to($users->Email, $users->Email)
					              ->subject('Đại Học Văn Hiến || Bạn vừa yêu cầu lấy mật khẩu');
					    });
						return Redirect::route("auth.get.login")->with("flash_mess","Một Email chứa thông tin vừa được gửi cho bạn.");
					}else{
						return Redirect::route("auth.get.forgot")->withInput(Input::except("txtcapchar","txtcapchar","txtdienthoai"))->with("error","Số điện thoại không tồn tại.");
					}
				}else{
					return Redirect::route("auth.get.forgot")->withInput(Input::except("txtcapchar","txtdienthoai"))->with("error","Tên đăng nhập không tồn tại.");
				}
			}else{
				return Redirect::route("auth.get.forgot")->withInput(Input::except("txtcapchar"))->with("error",$valid->errors()->first());
			}
		}
		/* Phần reset mật khẩu */
		public function getReset($user,$code){
			if(strlen($code) == 66){
				$users = User::where('username','=',$user)
						 	 ->where('activation_code','=',$code)
						 	 ->where('last_active',">=",\Carbon\Carbon::now())
						     ->where('HienThi','=',1)
						     ->first();
				if(isset($users)){
					return View::make('auth.pages.reset')->with('titlepage','Hoàn tất lấy lại mật khẩu.')
														 ->with('user',$user)
														 ->with('code',$code);
				}else{
					return Redirect::route("auth.get.login")->with("flash_mess","Yêu cầu lấy lại mật khẩu của bạn đã hết hạn.");
				}
			}else{
				return Redirect::route("auth.get.login")->with("flash_mess","Yêu cầu của bạn không hợp lệ.");
			}			
		}
		public function postReset(){
			// Xử lý reset pass word
			$change_rules=array(
				"txtPassMoi" 	=> "required|min:6",
				"txtRePassMoi"	=>	"required|same:txtPassMoi",
				"txtcapchar"	=>  "required|captcha"
			);
			$user_langs = array(
				"txtPassMoi.required" 	=> "Vui lòng nhập mật khẩu mới của bạn.",
				"txtRePassMoi.required" => "Vui lòng nhập xác nhận mật khẩu mới của bạn.",
				// Phần min
				"txtPassMoi.min"        => "Mật khẩu mới tối thiểu là :min ký tự.",
				"txtRePassMoi.same"  	=> "Xác nhận mật khẩu mới và mật khẩu mới không chính xác.",
				"txtcapchar.required"	=>	"Vui lòng nhập mã bảo mật.",
				"txtcapchar.captcha"	=>	"Mã bảo mật không đúng."
			);
			// End thiet lap validator
			$valid = Validator::make(Input::all(),$change_rules,$user_langs);
			if($valid->passes()){
				$users = User::where('username','=',Input::get('username'))
						 	 ->where('activation_code','=',Input::get('activation_code'))
						 	 ->where('last_active',">=",\Carbon\Carbon::now())
						     ->where('HienThi','=',1)
						     ->first();
				if(isset($users)){
					User::where('idUser', '=', $users->idUser)->update(array('password' => Hash::make($users->username.Input::get('txtPassMoi'))));
					return Redirect::route("auth.get.login")->with("success_mess","Reset mật khẩu thành công.");
				}else{
					return Redirect::route("auth.get.login")->with("flash_mess","Tài khoản của bạn không tồn tại.");
				}
			}else{
				return Redirect::route("auth.get.active",array('user' => Input::get('username'),'code'=>Input::get('activation_code')))->with("error",$valid->errors()->first());
			}
		}
		// Đăng Xuất
		public function getLogout(){
			Auth::logout();
			return Redirect::to('auth/login');
		}
	}
?>